home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
LOGIC Apps
/
Logic-APPLE_II_APPS.iso
/
mac
/
LOGIC Apple II 5.25" Library - ProDOS
/
PRO004.dsk
/
SORT.bas
< prev
next >
Wrap
BASIC Source File
|
2012-02-16
|
4KB
|
96 lines
10 REM << FILE CABINET >>
20 REM << PRODOS >>
30 REM << SORT MODULE >>
40 REM << CONVERTED BY >>
50 REM << MICHAEL MOORE >>
60 REM << MAY 1984 >>
70 :
100 GOTO 5400: REM << SORT ROUTINE >>
2400 REM << GENERAL PURPOSE ROUTINE >>>
2410 PRINT L$"->":V = PEEK(37)::H = LEN(L$) +3
2420 VTAB V: HTAB H: CALL -868: INPUT "";R$:R = VAL(R$): CALL -958
2430 IF R <1 OR R >CHOICE THEN 2450
2440 PRINT : RETURN
2450 IF V = 23 THEN V = 22
2460 CALL -868: PRINT " ENTER NUMBER 1 THRU ";CHOICE: GOTO 2420
2469 :
2500 REM <<<< GET ANSWER ROUTINE >>>
2510 V = PEEK(37) +1
2515 PRINT L$" (Y/N)"
2520 IF V >23 THEN V = 23
2530 VTAB V: HTAB ( LEN(L$) +8): CALL -868: INPUT A$: IF A$ = "Y" THEN YES = 1: RETURN
2540 IF A$ = "N" THEN YES = 0: RETURN
2550 INVERSE : PRINT " PRESS 'Y' OR 'N'...": NORMAL : IF V = >23 THEN V = 22
2560 GOTO 2530
5000 REM <<< SORT ROUTINE >>>>
5010 N = NR:M = N:FF = 0: ONERR GOTO 5080
5020 M = INT(M/2):K = N -M:J = 1: PRINT "SORTING ";: IF M = 0 THEN PRINT CHR$(13): GOTO 5100
5030 I = J
5040 LL = I +M:I2 = R(I):L2 = R(LL): ON L GOTO 5050,5060: ON ( VAL(N$(I2,S)) = > VAL(N$(L2,S))) GOTO 5080: GOTO 5070
5050 ON (N$(I2,S) < = N$(L2,S)) GOTO 5080: GOTO 5070
5060 ON ( VAL(N$(I2,S)) < = VAL(N$(L2,S))) GOTO 5080
5070 Y = R(I):R(I) = R(LL):R(LL) = Y:I = I -M: IF I > = 1 THEN 5040
5080 J = J +1: IF J >K THEN 5020
5090 GOTO 5030
5100 POKE 216,0: HTAB 10: INVERSE : FLASH : PRINT " <SORTING COMPLETE> ": NORMAL
5200 PRINT : PRINT "WANT TO SAVE >"FD$"< FILE":L$ = "SORTED BY >" +H$(S) +"< TO DISK ": GOSUB 2510: IF YES THEN F$ = "INDEX": GOSUB 24010
5210 GOTO 28010
5400 MF = 1: GOSUB 21010
5410 L$ = "ENTER # OF FIELD FOR SORT ":CHOICE = NH: GOSUB 2410:S = R
5411 ST = 0
5412 IF NR = <40 THEN ST = 2
5413 IF NR >40 THEN ST = 6
5414 IF NR >90 THEN ST = 15
5415 IF NR >140 THEN ST = 70
5416 IF NR >200 THEN ST = 150
5417 IF NR >250 THEN ST = 250
5418 IF NR >300 THEN ST = 370
5419 PRINT : PRINT "SORT WILL TAKE APPROX. ";: FLASH : PRINT (ST + INT(.06 *NR * LOG(NR)));: NORMAL : PRINT " SECONDS": PRINT
5420 PRINT : PRINT "DO YOU WANT TO SORT:": PRINT
5430 PRINT "1 ALPHABETICALLY"
5440 PRINT "2 NUMERICALLY (LOW TO HIGH)"
5450 PRINT "3 NUMERICALLY (HIGH TO LOW)": PRINT
5460 L$ = "WHICH ":CHOICE = 3: GOSUB 2410:L = R
5470 PRINT : PRINT : GOTO 5010
21000 REM <<< SELECT SUB ROUTINE >>
21010 HOME : PRINT "SELECT FROM:": PRINT
21020 IF MF = 0 THEN PRINT "O "H$(0)
21030 FOR I = 1 TO NH: PRINT I" ";H$(I): NEXT I:NS = NR
21040 MF = 0
21050 RETURN
24000 REM << WRITE INDEXFILE >>>>
24010 NR$ = RIGHT$("00000" + STR$(NR),5)
24020 FF = 0: IF F$ < >"INDEX" THEN FF = 1
24030 Q$ = PB$ +FD$ +"/" +F$
24040 PRINT D$"OPEN"Q$: PRINT D$"WRITE"Q$
24050 PRINT NR$
24060 FOR J = 1 TO NR
24070 ON FF GOTO 24130
24080 Y = R(J)
24090 FOR I = 1 TO NH
24100 PRINT N$(Y,I)
24110 NEXT I
24120 GOTO 24140
24130 PRINT R$(J)
24140 NEXT J
24150 PRINT D$"CLOSE"
24160 FF = 0
24170 RETURN
28010 PRINT D$"CHAIN";PX$ +"MAIN"
30000 REM <<< SORT MODULE FOR FILE CABINET - USING PRODOS >>>>
61000 REM *********************
61010 REM FILE CABINET
61020 REM PRODOS
61030 REM ---------------------
61040 REM CONVERTED BY
61050 REM MICHAEL MOORE
61060 REM MAY 1984
61070 REM =====================
61080 REM BASED ON
61090 REM FILE CABINET-MACH 5
61100 REM BY ED AYMOND
61110 REM AND BOB MATZINGER
61120 REM AS A MODIFICATION
61130 REM OF EARLIER VERSIONS
61140 REM *********************
61150 REM APPLE CORPS OF DALLAS